package com.example.model;

import com.example.enmus.ResultStatus;
import lombok.Data;

/**
 * 统一响应对象
 * 封装所有后端接口的返回结果，包含状态、错误信息和实际数据
 * @param <T> 数据类型
 */
@Data
public class Result<T> {
    private ResultStatus status;      // 响应状态（使用枚举类型）
    private String errorMessage;      // 错误信息
    private T data;                   // 响应数据

    /**
     * 成功响应静态方法
     * @param data 要返回的数据
     * @return 包含成功状态和数据的响应对象
     */
    public static <T> Result success(T data) {
        Result result = new Result();
        result.setStatus(ResultStatus.SUCCESS);  // 设置成功状态
        result.setErrorMessage("");              // 清空错误信息
        result.setData(data);                    // 设置返回数据
        return result;
    }

    /**
     * 失败响应静态方法
     * @param msg 失败的错误信息
     * @return 包含失败状态和错误信息的响应对象
     */
    public static Result fail(String msg) {
        Result result = new Result();
        result.setStatus(ResultStatus.FAIL);     // 设置失败状态
        result.setErrorMessage(msg);             // 设置错误信息
        result.setData("");                      // 数据置空
        return result;
    }

    /**
     * 未登录响应静态方法
     * @return 包含未登录状态的响应对象
     */
    public static Result unlogin() {
        Result result = new Result();
        result.setStatus(ResultStatus.UNLOGIN);  // 设置未登录状态
        result.setErrorMessage("用户未登录");     // 设置未登录提示信息
        result.setData(null);                    // 数据置为null
        return result;
    }
}